package com.jandar.util;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
 * 时间转换工具类。
 * 
 * @author pqj
 * @version 2009-5-19
 */
public class DateUtils {

	/** pattern: yyyy-MM-dd HH:mm:ss */
	public static final String PATTERN_1 = "yyyy-MM-dd HH:mm:ss";

	/** pattern: yyyy-MM-dd */
	public static final String PATTERN_2 = "yyyy-MM-dd";

	/** pattern: yyyy/MM/dd HH:mm:ss */
	public static final String PATTERN_3 = "yyyy/MM/dd HH:mm:ss";

	/** pattern: yyyy/MM/dd */
	public static final String PATTERN_4 = "yyyy/MM/dd";

	private static Map<String, DateFormat> context = new ConcurrentHashMap<String, DateFormat>();

	/**
	 * 创建DateFormat对象。
	 * 
	 * @param pattern 时间模式
	 * @param locale 区域语言
	 * @return DateFormat
	 */
	public static DateFormat getDateFormat(String pattern, Locale locale) {
		DateFormat format = null;
		if (context.containsKey(pattern)) {
			format = context.get(pattern);
		} else {
			format = new SimpleDateFormat(pattern, locale);
			context.put(pattern, format);
		}
		return format;
	}

	/**
	 * 格式化时间字符串为指定格式字符串。
	 * 
	 * @param srcPattern 原时间模式
	 * @param desPattern 目标时间模式
	 * @param srcDate 原时间
	 * @return 格式化时间字符串
	 * @throws ParseException 解析异常
	 */
	public static String format(String srcPattern, String desPattern, String srcDate)
			throws ParseException {
		String ret = null;
		DateFormat format = getDateFormat(srcPattern, Locale.getDefault());
		Date date = format.parse(srcDate);
		ret = getDateFormat(desPattern, Locale.getDefault()).format(date);
		return ret;
	}

	/**
	 * 格式化时间。
	 * 
	 * @param desPattern 指定时间模式
	 * @param date 时间
	 * @return 格式化时间
	 */
	public static String format(String desPattern, Date date) {
		DateFormat format = getDateFormat(desPattern, Locale.getDefault());
		return format.format(date);
	}
}
